package com.xuecheng.manage_media.controller;

import com.xuecheng.api.media.MediaUploadControllerApi;
import com.xuecheng.framework.domain.media.response.CheckChunkResult;
import com.xuecheng.framework.model.response.ResponseResult;
import com.xuecheng.manage_media.service.MediaUploadService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

@RestController
@RequestMapping("/media/upload")
public class MediaUploadController implements MediaUploadControllerApi {

    @Resource
    private MediaUploadService mediaUploadService;

    /**
     * 上传文件第1步->注册文件,检查文件是否存在
     *
     * @param path     文件路径
     * @param fileMd5  文件md5
     * @param fileName 文件名称
     * @param fileSize 文件大小
     * @param mimetype 文件类型
     * @param fileExt  文件扩展名
     * @return 状态
     */
    @Override
    @PostMapping("/register")
    public ResponseResult register(String path, String fileMd5, String fileName, Long fileSize, String mimetype, String fileExt) {
        return mediaUploadService.register(path, fileMd5, fileName, fileSize, mimetype, fileExt);
    }

    /**
     * 上传文件第2步->检查分块是否存在
     *
     * @param path      文件路径
     * @param fileMd5   文件md5
     * @param chunk     分块下标
     * @param chunkSize 分块大小
     * @return 结果
     */
    @Override
    @PostMapping("/checkchunk")
    public CheckChunkResult checkChunk(String path, String fileMd5, Integer chunk, Long chunkSize) {
        return mediaUploadService.checkChunk(path, fileMd5, chunk, chunkSize);
    }

    /**
     * 上传文件第3步->接收分块文件
     *
     * @param path    文件路径
     * @param file    分块文件
     * @param fileMd5 文件md5
     * @param chunk   分块下标
     * @return 结果
     */
    @Override
    @PostMapping("/uploadchunk")
    public ResponseResult uploadChunk( String path, MultipartFile file, String fileMd5, Integer chunk) {
        return mediaUploadService.uploadChunk(path, file, fileMd5, chunk);
    }

    /**
     * 上传文件第4步->合并分块
     *
     * @param path     文件路径
     * @param fileMd5  文件md5
     * @param fileName 文件名称
     * @param fileSize 文件大小
     * @param mimetype 文件类型
     * @param fileExt  文件后缀
     * @return 结果
     */
    @Override
    @PostMapping("/mergechunks")
    public ResponseResult mergeChunks(String path, String fileMd5, String fileName, Long fileSize, String mimetype, String fileExt) {
        return mediaUploadService.mergeChunks(path, fileMd5, fileName, fileSize, mimetype, fileExt);
    }

}
